//package org.example.backend.filter;
//
//import com.alibaba.fastjson2.JSONObject;  // 注意：您可能需要添加fastjson2依赖
//import jakarta.servlet.*;
//import jakarta.servlet.annotation.WebFilter;
//import jakarta.servlet.http.Cookie;
//import jakarta.servlet.http.HttpServletRequest;
//import jakarta.servlet.http.HttpServletResponse;
//import lombok.extern.slf4j.Slf4j;
//import org.example.backend.util.TokenUtil;
//import org.example.backend.common.Result;  // 假设这是您的Result类路径
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.util.StringUtils;
//import org.springframework.stereotype.Component;
//
//import java.io.IOException;
//
//@Slf4j
//@WebFilter(urlPatterns = "/*")
//@Component // 确保Spring能够管理这个Bean
//public class Filter implements jakarta.servlet.Filter {
//
//    @Autowired
//    private TokenUtil tokenUtil;
//
//    @Override
//    public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException {
//        HttpServletRequest httpServletRequest = (HttpServletRequest) request;
//        HttpServletResponse httpServletResponse = (HttpServletResponse) response;
//        httpServletResponse.setCharacterEncoding("UTF-8");
//
//        //获取url
//        String url = httpServletRequest.getRequestURI();
//        log.info("url:{}", url);
//
//        //判断是否包含login、register请求,是就放行
//        if (url.contains("login")||url.contains("register")||url.contains("test")) {
//            filterChain.doFilter(request, response);
//            return;
//        }
//
//        // 首先尝试从请求头获取token
//        String token = httpServletRequest.getHeader("token");
//
//        // 如果请求头中没有token，尝试从Cookie中获取
//        if (!StringUtils.hasLength(token)) {
//            Cookie[] cookies = httpServletRequest.getCookies();
//            if (cookies != null) {
//                for (Cookie cookie : cookies) {
//                    if ("LINZEYO_AUTH".equals(cookie.getName())) {
//                        token = cookie.getValue();
//                        break;
//                    }
//                }
//            }
//        }
//
//        //判断token是否存在
//        if (!StringUtils.hasLength(token)) {
//            httpServletResponse.setStatus(HttpServletResponse.SC_UNAUTHORIZED); // 设置401状态码
//            httpServletResponse.setContentType("application/json");
//            Result error = Result.unauthorized("未登录");
//            String noLogin = JSONObject.toJSONString(error);
//            httpServletResponse.getWriter().write(noLogin);
//            return;
//        }
//
//        //解析token是否存在且有效
//        try {
//            // 从token中提取用户名
//            String username = tokenUtil.extractUsername(token);
//
//            // 检查token是否过期
//            if (tokenUtil.extractExpiration(token).before(new java.util.Date())) {
//                throw new Exception("Token已过期");
//            }
//        } catch (Exception e) {
//            e.printStackTrace();
//            Result noLogin = Result.error("未登录");
//            String s = JSONObject.toJSONString(noLogin);
//            httpServletResponse.getWriter().write(s);
//            return;
//        }
//
//        log.info("令牌合法，放行:{}", token);
//        filterChain.doFilter(request, response);
//    }
//}